今天來介紹reflog
我們在練習的時候
往往練習時會做錯指令 沒達到想要的結果
這時候除了重做練習之外
偷懶一點 我們可以透過 reflog 來還原到特定的commit
之前去上保哥的課的時候
有給我一個觀念
在git下 任何有commit的版本 都不會弄丟
即使做錯了
也可以從 reflog 中找回來
所以可以放心地亂玩
舉個實際的例子
原本的線圖如下
之後下reset指令到313b3bd
$ git reset --hard 313b3bd
HEAD is now at 313b3bd Bug fixed
reset --hard 到 HEAD 後才發現reset前,後面那版 commit 還是需要
這時候看一下分支上的線圖
會發現 reset 後的線圖上
原本在 HEAD 後面的 commit 不見了
利用reflog 來查看還沒reset前的版本的hashid
我們這邊要找的應該就是 f2b286a master@{1}: commit: Revert "Bug fixed" 這版
$ git reflog master
313b3bd master@{0}: reset: moving to 313b3bd
f2b286a master@{1}: commit: Revert "Bug fixed"
1bd2f36 master@{2}: reset: moving to 1bd2f3664c850eacff93260c5b4416032af67f2d
69f30fd master@{3}: commit: revert 313b3bd
1bd2f36 master@{4}: commit: commit stash data
.
.
.
.
.
reset到該版本
$ git reset --hard f2b286a
HEAD is now at f2b286a Revert "Bug fixed"
這下子版本就回到做錯的步驟的前一版了
線圖如下
P.S. 強者我同事補充:gc後會清掉reflog 所以reflog不是一直都會存在 要注意喔